# FastAPI 提供了 response_model 参数，声明 return 响应体的模型
'''
什么是路径操作、路径函数

# 路径操作
    @app.post('/items/', response_model=Item)

# 路径函数
async def create_item(item: Item):
'''

'''
    response_model 是路径操作的参数，并不是路径函数的参数
    @app.get()
    @app.post()
    @app.put()
    @app.delete()
'''

from typing import List, Optional

import uvicorn
from fastapi import FastAPI, Query, Path, Body
from pydantic import BaseModel, Field

app = FastAPI()


class Item(BaseModel):
    name: str
    desc: Optional[str] = None
    price: float
    tax: float
    tags: List[str] = []


@app.post('/items/', response_model=Item)
async def create_item(item: Item):
    # item.tax = "aaaaa"
    return item

'''
    FastAPI 通过 response_model 会做
    将输出数据转换为 Model 中声明的类型
    验证数据
    在 OpenAPI 给 Response 添加 JSON Schema 和 Example Value
    最重要：将输出数据限制为 model 的数据
'''

'''
    为什么 response_model 不是路径函数参数而是路径操作参数呢？
    因为路径函数的返回值并不是固定的，可能是 dict、数据库对象，或其他模型
    但是使用响应模型可以对响应数据进行字段限制和序列化
'''





if __name__ == '__main__':
    uvicorn.run(app='main:app', host='127.0.0.1', port=8000, reload=True, debug=True)
